#include "Arbre.hpp"
Arbre::Arbre(){
    //initialisation de la racine avec null comme pere
	m_racine = new Noeud(NULL);
}
Arbre::Arbre(const Image &im){
    //initialisation de la racine avec null comme pere et im comme image
	m_racine = new Noeud(NULL, im);
}
//Destructeur de la structure arbre
Arbre::~Arbre(){
	m_racine->destructNoeud();
	delete m_racine;
}
void Arbre::split(){
    //apel du split sur la racine
	m_racine->split();
}
//fonction de test pour verifier si le split marche bien
void Arbre::afficheMaillage(IplImage *img){
	IplImage* imageBlocs=cvLoadImage("deuxcarre.pgm");
	m_racine->afficheMaillage(imageBlocs);
	cvNamedWindow("maillage", CV_WINDOW_AUTOSIZE);
        cvShowImage("maillage", imageBlocs);
	cvWaitKey(0);
	cvDestroyWindow("maillage");
	cvReleaseImage(&imageBlocs);
}
void Arbre::merge(){
    //apel du merge sur la racine
	m_racine->merge();
}
//fonction de test pour verifier si le Merge marche bien
void Arbre::afficheRegion(CvSize size){
	IplImage* imageRegions = cvCreateImage(size, IPL_DEPTH_8U, 1);
        for(map<int,RegionImage *>::iterator i = RegionImage::getTotal()->begin() ; i!= RegionImage::getTotal()->end() ; i++){
                RegionImage  * e = (RegionImage *)(i->second);;
		e->afficheRegion(imageRegions);
	}
	cvNamedWindow("region", 0);
	cvShowImage("region", imageRegions);
	cvWaitKey(0);
	cvDestroyWindow("region");
	cvReleaseImage(&imageRegions);
}
QPixmap Arbre::getPixmap(){
    //initialisation avec comme parametre la taille de l'image
    QImage im = QImage(m_racine->getImage().getwidth(), m_racine->getImage().getheight(), QImage::Format_RGB32);

    //parcours de toute les regions
    for(map<int,RegionImage *>::iterator i = RegionImage::getTotal()->begin() ; i!= RegionImage::getTotal()->end() ; i++){
        //Remplissage de la Qimage
        RegionImage  * e = (RegionImage *)(i->second);
        e->fillImage(im);
    }
    //transformation en QPixmap
    return QPixmap::fromImage(im);
}
